package qjc.e_普通数组;

import java.util.Arrays;

public class e4_除自身以外数组的乘积 {
    /**
     * 获取数组的长度，初始化结果数组，长度与输入数组相同，如果数组为空，直接返回结果数组，
     * 初始化结果数组的所有元素为1，初始化前缀乘积，从左到右遍历数组，计算前缀乘积，
     * 当前位置的结果是前缀乘积，更新前缀乘积，乘以当前数字，初始化后缀乘积，
     * 从右到左遍历数组，计算后缀乘积，当前位置的结果乘以后缀乘积，更新后缀乘积，乘以当前数字
     */
    public int[] productExceptSelf(int[] nums) {
        int n = nums.length;
        int[] res = new int[n];
        if(n == 0){
            return res;
        }
        Arrays.fill(res, 1);
        int pre = 1;
        for (int i = 0; i < n; i++) {
            res[i] = pre;
            pre *= nums[i];
        }
        int post = 1;
        for (int i = n - 1; i >= 0 ; i--) {
            res[i] *= post;
            post *= nums[i];
        }
        return res;
    }
}
